#!/usr/bin/env bash

# redis配置文件
function redis_config() {
  # 将配置写进配置文件
  echo_sleep "\n开始写入配置文件……"

  cat >${applicationPath}/redis.conf <<-EOF
					bind 0.0.0.0
					port 6379
					protected-mode no
					daemonize no
					databases 16
					dir ./
					appendonly yes
				EOF

  echo_sleep "配置文件写入完成！\n"
}

# 判断容器是否启动成功
function redis_successOrNot() {
  echo_sleep "docker run命令:\n $dockerRunCmd \n" 2
  if [[ -n $(docker ps -q -f "name=^$application$") ]]; then
    echo -e "$application 容器启动成功"
    echo -e "\t端口号：$port"
    echo -e "\t版本号：$version"
    echo -e "\t容器名称：$application"
    echo -e "\t密码：$passwd"
    echo -e "\t本地映射路径：$applicationPath"
    echo -e "进入容器使用命令：docker exec -it $application /bin/bash"
  else
    log_error "$application 容器启动失败,请检查docker run命令是否有误,端口是否被占用"
  fi
}

# 输入需要修改的信息
function redis_input() {
  port=$(read_input "请输入需要映射的端口(默认为 ${port})：" ${port})
  application=$(read_input "请输入容器的名称(默认为 ${application})：" ${application})

  read -r -p "请输入 ${application} 密码(默认为 ${passwd})：" inputPasswd
  if [ "$inputPasswd" != "" ]; then
    passwd=$inputPasswd
    echo -e masterauth ${passwd} >>${applicationPath}/redis.conf
    echo -e requirepass ${passwd} >>${applicationPath}/redis.conf
  fi
}

# 安装redis
function redis_install() {
  application="redis"                         # 应用名称,docker ps中显示的名称
  image="redis"                               # docker仓库中镜像名称
  applicationPath="/opt/redis/${application}" # 本地映射文件路径
  port="6379"                                 # 对外映射的端口号
  passwd=""                                   # 密码
  version="latest"                            # 镜像版本号,默认为最新版本
  dockerRunCmd=""                             # 最后执行的docker run命令

  echo -e "\n=========================开始安装Redis========================="

  echo_yellow "1.检测是否存在 ${image} 容器"
  docker_delExisting ${image}

  echo_yellow "2.开始拉取镜像文件"
  docker_pull

  echo_yellow "3.开始创建本地映射目录"
  create_file_path data

  echo_yellow "4.开始创建配置文件"
  redis_config

  echo_yellow "5.创建并启动docker容器"
  redis_input

  echo -e "${application}启动中,请等待......"

  dockerRunCmd="docker run --restart=always -p $port:6379 --name $application \
	-v ${applicationPath}/redis.conf:/etc/redis/redis.conf \
	-v ${applicationPath}/data:/data \
	-v /etc/localtime:/etc/localtime:ro \
	-d $image:$version /etc/redis/redis.conf  --appendonly yes &> /dev/null"

  eval $dockerRunCmd

  echo_yellow "6.检测容器是否启动成功"
  redis_successOrNot

  echo -e "=========================安装Redis结束========================="
}
